·[PASCAL]谁拿了最多奖学金

来源:百度知道 编辑:UC知道 时间:2024/05/24 11:48:21
Program jxj;
var s:array[1..32767] of string;
a,b,d,e:array[1..32767] of integer;
p:array[1..32767] of char;
i,j,k,l,m,n,z,g,ba,x,ll,q,max:integer;t:string;p1,p2:char;
begin
readln(n);
max:=-32767;
for i:=1 to n do
readln(s[i]);
for i:=1 to n do
begin
l:=length(s[i]);k:=0;
for j:=1 to l do
if s[i][j-1]=' ' then
begin
inc(k);
case k of
1:q:=j;
2:ba:=j;
3:g:=j;
4:x:=j;
5:ll:=j;
end;
end;
z:=ord(s[i][q])-48;
a[i]:=(z*10)+(ord(s[i][q+1]))-48;
z:=ord(s[i][ba])-48;
b[i]:=(z*10)+(ord(s[i][ba+1])-48);
p1:=s[i][g];p2:=s[i][x];
d[i]:=ord(s[i][ll])-48;
e[i]:=0;
if a[i]>80 then
begin
if (d[i]&g

本题题目有点长..
基本思路:首先用ansistring读入每一行并作处理,可先用pos函数找到空格然后将1~pos的值-1截下作为名字nn,接下来2个分数都是将前面空格前的删掉继续用pos找空格,然后对空格前的字符串长度作处理,并将分数记为n1、n2,再接下来同样处理得出n3、n4、n5,然后就按照题目要求计算出当前人的奖学金s,然后与之前最大值max比较,若比max大那么就将max:=s同时将该同学名字nn存如maxn中,并将s加到总和sum中,最后就可以按要求输出max,maxn,sum了.
这道题很早做的..已经忘了很多,程序太长不好找错..只能讲讲思路了.
附我以前做的程序,略有些复杂,可优化(与上述变量无关):
var a,b,c,l,i,j,n,sum,max,s,ss:longint;nn,n1,n2,n3,n4,n5:ansistring;
begin
readln(n);
sum:=0;
max:=0;//初始化
for i:=1 to n do begin
s:=0;//还是初始化
readln(n4);
l:=length(n4);
n1:='';//仍然是初始化,我是读一行做一行..
for j:=1 to l do
if n4[j]<>' ' then n1:=n1+n4[j] else begin ss:=j;break;end;//找名字,用pos看上去会清楚点..
n5:='';
for j:=ss+1 to l do
if n4[j]<>' ' then n5:=n5+n4[j] else begin ss:=j;break;end;
if length(n5)=1 then a:=ord(n5[1])-ord('0') else
if length(n5)=2 then a:=(ord(n5[1])-ord('0'))*10+ord(n5[2])-ord('0') else
if l